SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paCalcularLosPuntajesDelAgente] 

@Convocatoria INT,
@Agente INT,
@Nivel INT,
@Ciclo INT

AS

set nocount on --anula el tráfico con el servidor

DECLARE @Formula VARCHAR(100)
DECLARE @Concepto INT
DECLARE @Inscripcion INT
DECLARE @Error INT
DECLARE @TipoConvocatoria AS INT
DECLARE @InscripcionAnt as INT


BEGIN TRANSACTION
             SET @ERROR=0

	-- Si existen calificaciones para la inscripcion, se elimiman...
	IF EXISTS(SELECT top 1 Inscripcion FROM tb_CalificacionesDeInscripcion CI 
		INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion
		 INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
                          INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente 
		WHERE C.IdConvocatoria = @Convocatoria AND A.Documento = @Agente ) 
                         BEGIN --AND I.Nivel = @Nivel AND I.Ciclo = @Ciclo
			print 'borro los puntajes del agente ' + cast(@Agente as varchar) + 'en la convocatoria ' + cast(@convocatoria as varchar)
			DELETE CI
			FROM tb_CalificacionesDeInscripcion CI 
			INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion
			INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
			INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente
			WHERE C.IdConvocatoria = @Convocatoria AND A.Documento = @Agente AND I.Nivel = @Nivel AND I.Ciclo = @Ciclo
		END

-- BORRO LAS INSCRIPCIONES CALCULADAS
		print 'voy a borrar las inscripciones calculadas '
	delete tb_inscripcionescalculadas
	set @InscripcionAnt =0
		print ' ya las borre (tb_inscripcionescalculadas)'
	
	DECLARE X CURSOR forward_only FOR

	SELECT CP.FormulaPuntaje, CP.IDConcepto, IC.IdInscripcionConvocatoria,CP.TipoConvocatoria
	FROM tb_ConceptosDePuntaje CP INNER JOIN tb_TiposDeConvocatorias TC ON CP.TipoConvocatoria = TC.IdTipoConvocatoria 
	INNER JOIN tb_Convocatorias C ON C.TipoConvocatoria = TC.IdTipoConvocatoria
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.Convocatoria = C.IdConvocatoria
	INNER JOIN tb_Agentes A ON A.Idagente = IC.Agente
	WHERE C.IdConvocatoria = @Convocatoria AND CP.FormulaPuntaje IS NOT NULL AND A.Documento = @Agente
	AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo 
	AND IC.IdInscripcionConvocatoria = (SELECT MIN(IdInscripcionConvocatoria) FROM tb_InscripcionesConvocatorias 
                WHERE Agente = IC.Agente and Convocatoria = IC.Convocatoria AND CargoGenerico = IC.CargoGenerico AND AsignaturaGenerica = IC.AsignaturaGenerica)-- AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo)
	order by 3,1 desc --agregado el 9/11/2005 por que necesito que se llame primero pje por titulos y luego pje por acumul o est. parciales

	OPEN X

	FETCH NEXT FROM X INTO @Formula, @Concepto, @Inscripcion, @TipoConvocatoria

	WHILE @@FETCH_STATUS = 0 BEGIN
		
		-- Forma el sql dinamico con el llamado al concepto
		DECLARE @temp VARCHAR(8000)
		SELECT @temp = 'DECLARE @Puntaje FLOAT ' + CHAR(10) + 'SET @Puntaje = 0 ' + CHAR(10)
		SELECT @temp = @temp + 'EXEC ' +@Formula + ' ' + CONVERT(VARCHAR, @Inscripcion) + ', @Puntaje OUTPUT, 0' + CHAR(10)
		SELECT @temp = @temp + 'EXEC paAgregarCalificacionesDeInscripcion ' + CONVERT(VARCHAR, @Inscripcion) + ', ' + CONVERT(VARCHAR, @Concepto) +', @Puntaje'
		-- Ejecuta el sql dinamico 
		print @temp
		EXEC(@temp)
		SET @Error = @@ERROR
		
		IF @Error <> 0 BEGIN
			DECLARE @t VARCHAR(100)
			SET @t = 'PROCEDIMIENTO ' + @Formula
			RAISERROR(@t, 16, 1)
			GOTO Salir
		END
		
		if @inscripcion <> @inscripcionAnt 
		begin
			insert tb_inscripcionescalculadas (inscripcion) values (@inscripcion)
--			INSERT INTO [SageNET].[dbo].[tb_inscripcionesCalculadas]([inscripcion])
	--		VALUES(<inscripcion,int,>)
			set @InscripcionAnt=@inscripcion
		end
			
		FETCH NEXT FROM X INTO @Formula, @Concepto, @inscripcion, @TipoConvocatoria
	END

	CLOSE X
	DEALLOCATE X

	--  COMPLETA EL CONCEPTO PUNTAJE FINAL

	if  @TipoConvocatoria = 1 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 234, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542,579,581,582,583,584,589,590,591,592,653,654,656,657,658,659) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END
	if  @TipoConvocatoria = 2 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 329, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542,579,581,582,583,584,589,590,591,592,653,654,656,657,658,659) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END

	if  @TipoConvocatoria = 3 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 632, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542,579,581,582,583,584,589,590,591,592,632,633,634,635,636,653,654,656,657,658,659) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END


	if  @TipoConvocatoria = 9 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 579, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.idAgente = IC.Agente
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN(579,581,582,583,584,589,590,591,592,653,654,656,657,658,659) AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR
		IF @Error <> 0 GOTO Salir
	END
	
--  COMPLETA EL CONCEPTO PUNTAJE ACRECENTAMINETO
/*	
	if  @TipoConvocatoria = 1 
	BEGIN
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 235, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.IdAgente = IC.Agente	
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN (245, 246, 247, 248, 234, 235, 191, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542,653,654,656,657,658,659)
		AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
	END
*/
	--  COMPLETA EL CONCEPTO PUNTAJE final
	if  @TipoConvocatoria = 11
	BEGIN
		print 'tipo de convocatoria es 11'
		INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
		SELECT CI.Inscripcion, 653, SUM(CI.Puntaje)
		FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Agentes A ON A.IdAgente = IC.Agente	
		WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN (245, 246, 247, 248, 234, 235, 191, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542,653,654,656,657,658,659)
		AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
		GROUP BY CI.Inscripcion
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
	END
--GRABO LAS CALIFICACIONES EN LAS LOCALIDADES RESTANTES

	DECLARE I CURSOR FORWARD_ONLY FOR
	SELECT distinct inscripcion  FROM tb_inscripcionescalculadas                      --------OJO ARREGLO 2006         LE PUSE EL DISTINCT POR QUE SELECCIONABA INSCRIPCIONES REPETIDAS Y POR ESO SE DUPLICABAN 
	OPEN I
	FETCH NEXT FROM I INTO  @Inscripcion

declare @tope as int
declare @contador as int
set @contador=0

--	SELECT @tope = count(*)  FROM tb_inscripcionescalculadas
--print 'tope , contador'
--print @tope
--print @contador

	WHILE @@FETCH_STATUS = 0  BEGIN
--		set @contador=@contador+1
		--select @pje=isnull( C.puntaje,0),@tv=isnull(titulovalorado,0),@ct=isnull(categoriadetitulo,0),@prom=isnull(promediotitulo,0),@te=isnull(TituloEspecifico,'N'),@tr=isnull(tituloRegistrado,'N')
		--from tb_InscripcionesConvocatorias I JOIN TB_CALIFICACIONESDEINSCRIPCION C ON I.IDINSCRIPCIONCONVOCATORIA=C.INSCRIPCION AND CONCEPTO=234
	--	where idinscripcionconvocatoria = @Inscripcion
		--actualizo los datos en la inscripcion faltante
		--print 'actualizo los datos en la inscripcion faltante' + cast(@Inscripcion as  varchar)
		--update tb_inscripcionesconvocatorias set puntaje=@pje, titulovalorado=@tv,categoriadetitulo = @ct, promediotitulo=@prom,tituloespecifico=@te,tituloregistrado=@tr
		--where  idInscripcionConvocatoria=@inscf

		EXEC GrabarLocalidadesRestantes @Inscripcion,@TipoConvocatoria
		FETCH NEXT FROM I INTO  @Inscripcion
	END

	CLOSE I
	DEALLOCATE I

/*	--  COMPLETA EL CONCEPTO PUNTAJE MOD ARTISTICA
	INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
	SELECT CI.Inscripcion, 473, SUM(CI.Puntaje)
	FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
	INNER JOIN tb_Agentes A ON A.IdAgente = IC.Agente	
	WHERE IC.Convocatoria = @Convocatoria AND A.Documento = @Agente AND CI.Concepto NOT IN (245, 246, 247, 248, 234, 235, 235, 473,535,536,537,538,539,540,541,542)
	AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo
	GROUP BY CI.Inscripcion
	SET @Error = @@ERROR
*/
Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paCalcularLosPuntajesDelAgente] TO [Juntas]
GO
